/*
 * 枚举插件
 * 
 *
 * @Author:
 * @Date:      2022-09-06 20:51:03
 * @Wechat: 
 * @Email: 
 * @Copyright 
 */
import _ from 'lodash';
import { FLAG_NUMBER_ENUM } from '/@/constants/common-const';

export default {
  install: (app, lxEnumWrapper) => {
    const lxEnumPlugin = {};
    /**
     * 根据枚举值获取描述
     * @param {*} constantName 枚举名
     * @param {*} value          枚举值
     * @returns
     */
    lxEnumPlugin.getDescByValue = function (constantName, value) {
      if (!lxEnumWrapper || !Object.prototype.hasOwnProperty.call(lxEnumWrapper, constantName)) {
        console.error('无法找到变量名称：' + constantName + '，请检查 /constants/index.js 文件中是否引入此变量！');
        return '';
      }
      // boolean类型需要做特殊处理
      if (constantName === 'FLAG_NUMBER_ENUM' && !_.isUndefined(value) && typeof value === 'boolean') {
        value = value ? FLAG_NUMBER_ENUM.TRUE.value : FLAG_NUMBER_ENUM.FALSE.value;
      }

      let lxEnum = lxEnumWrapper[constantName];
      for (let item in lxEnum) {
        if (lxEnum[item].value === value) {
          return lxEnum[item].desc;
        }
      }
      return '';
    };
    /**
     * 根据枚举名获取对应的描述键值对[{value:desc}]
     * @param {*} constantName 枚举名
     * @returns
     */
    lxEnumPlugin.getValueDescList = function (constantName) {
      if (!Object.prototype.hasOwnProperty.call(lxEnumWrapper, constantName)) {
        console.error('无法找到变量名称：' + constantName + '，请检查 /constants/index.js 文件中是否引入此变量！');
        return [];
      }
      const result = [];
      let targetLxEnum = lxEnumWrapper[constantName];
      for (let item in targetLxEnum) {
        result.push(targetLxEnum[item]);
      }
      return result;
    };

    /**
     * 根据枚举名获取对应的value描述键值对{value:desc}
     * @param {*} constantName 枚举名
     * @returns
     */
    lxEnumPlugin.getValueDesc = function (constantName) {
      if (!Object.prototype.hasOwnProperty.call(lxEnumWrapper, constantName)) {
        console.error('无法找到变量名称：' + constantName + '，请检查 /constants/index.js 文件中是否引入此变量！');
        return {};
      }
      let lxEnum = lxEnumWrapper[constantName];
      let result = {};
      for (let item in lxEnum) {
        let key = lxEnum[item].value + '';
        result[key] = lxEnum[item].desc;
      }
      return result;
    };

    app.config.globalProperties.$lxEnumPlugin = lxEnumPlugin;
    app.provide('lxEnumPlugin', lxEnumPlugin);
  },
};
